// 项目通用方法的封装
// 可以重置任何页面的表单refName=表单参数名称：form
// <el-form ref="form" :model="form" :rules="rules" label-width="80px">
export function resetForm(refName) {
  if (this.$refs[refName]) {
    this.$refs[refName].resetFields()
  }
}

// 把日期范围构造成beginTime和endTime
// 参数一 自己带入的参数
// 参数二 时间参数
// 返回 一个整体的 数据
export function addDateRange(params, dateRange) {
  var search = params
  // console.log(search)
  search.beginTime = ''
  search.endTime = ''
  if (dateRange != null && dateRange !== '' && dateRange !== undefined) {
    search.beginTime = this.dateRange[0]
    search.endTime = this.dateRange[1]
  }
  // console.log(search)
  return search
}

/**
 * 状态翻译 datas是当前状态数据列表 value要翻译的值
 * 根据传递过来的datas的数据行进行 校验
 *
 * @param {*} datas 需要校验的集合
 * @param {*} value 给定一个参数 进行判断是否为这个参数对应的  是的话 那么取字典dictLabel类型(中文翻译)
 */
export function selectDictLabel(datas, value) {
  // // console.log(datas)
  // // console.log(value)
  var actions = []
  Object.keys(datas).map((key) => {
    if (datas[key].dictValue === value) {
      actions.push(datas[key].dictLabel)
      return false
    }
  })
  return actions.join('')
}

/**
 * 取路由路径上的参数
 * @returns {Dictionary<string>}
 */
export function getRouteParams() {
  const par = this.$route.params
  return par
}

/** 构造树
 * @Param {*} data 数据源
 * @Param {*} id 字段ID 默认id
 * @Param {*} parentId 父节字段  默认 parentId
 * @Param {*} 子节点字段  默认 children
 * @Param {*} rootId 根节点ID 默认0
 */
export function handleTree(data, id, parentId, children, rootId) {
  id = id || 'id'
  parentId = parentId || 'parentId'
  children = children || 'children'
  rootId = rootId || 0
  // 对源数据深度克隆
  const cloneData = JSON.parse(JSON.stringify(data))
  // 循环所有项目
  const treeData = cloneData.filter(father => {
    const branchArr = cloneData.filter(child => {
      // 进行匹配菜单 是否为father 的子节点
      return father[id] === child[parentId]
    })
    branchArr.length > 0 ? father.children = branchArr : ''
    // 返回上一层
    return father[parentId] === rootId
  })
  return treeData !== '' ? treeData : data
}

/**
 *
 * @param {要构造的数据源} data
 * @param {字段ID，默认为ID} id
 * @param {父节点字，默认parentId} parentId
 * @param {子节点字段} children
 * @param {根节点id 默认为0} rootId
 */
export function handelTreeClone(data, id, parentId, children, rootId) {
  id = id || 'id'
  parentId = parentId || 'parentId'
  children = children || 'children'
  rootId = rootId || 0
  // 对源数据进行深度克隆
  const cloneData = JSON.parse(JSON.stringify(data))
  // 循环所有的菜单节点
  const treeData = cloneData.filter(father => { // 循环父节点 as father
    // 判断是否为当前father的儿子节点
    const subArr = cloneData.filter(children => {
      // 如果children的parentId等于father的id 那么表示 当前节点为 father的儿子节点
      return father[id] === children[parentId]
    })
    // 判断subArr返回的是否有数据有就注入到父节点的children当中
    subArr.length > 0 ? father.children = subArr : ''
    // 返回每一个根节点的父ID， 判断父节点的parentID 是否为根节点
    // // console.log(father[parentId], father[parentId] === rootId)
    return father[parentId] === rootId
  })
  // 返回全部数据
  return treeData !== '' ? treeData : data
}

/**
 * 公共的根据出生年月计算年龄的方法
 *  @param birthday 格式必须为2020-08-08
 */
export function getAge(birthday) {
  var birArr = birthday.split('-')
  var birYear = parseInt(birArr[0])
  var birMonth = parseInt(birArr[1])
  var birDay = parseInt(birArr[2])

  d = new Date()
  var nowYear = d.getFullYear()
  var nowMonth = d.getMonth() + 1 // 记得加1
  var nowDay = d.getDate()
  var returnAge

  if (birArr == null) {
    return false
  }
  var d = new Date(birYear, birMonth - 1, birDay)
  if (d.getFullYear() === birYear && (d.getMonth() + 1) === birMonth && d.getDate() === birDay) {
    if (nowYear === birYear) {
      returnAge = 0 //
    } else {
      var ageDiff = nowYear - birYear //
      if (ageDiff > 0) {
        if (nowMonth === birMonth) {
          var dayDiff = nowDay - birDay //
          if (dayDiff < 0) {
            returnAge = ageDiff - 1
          } else {
            returnAge = ageDiff
          }
        } else {
          var monthDiff = nowMonth - birMonth //
          if (monthDiff < 0) {
            returnAge = ageDiff - 1
          } else {
            returnAge = ageDiff
          }
        }
      } else {
        return '出生日期晚于今天，数据有误' // 返回-1 表示出生日期输入错误 晚于今天
      }
    }
    return returnAge
  } else {
    return ('输入的日期格式错误！')
  }
}

// 判断当前时间是上午1  下午2  晚上3
// 根据出生日期计算年龄 1990-01-01
export function getCurrentTimeType() {
  const now = new Date()
  const hour = now.getHours()
  if (hour >= 6 && hour < 12) {
    return '1'
  } else if (hour >= 12 && hour < 18) {
    return '2'
  } else if (hour >= 0 && hour < 6) {
    return '3'
  }
}

/**
 * 随机生成 用户姓名
 */
export function getPhone() {
  // eslint-disable-next-line no-array-constructor
  var prefixArray = ['130', '131', '132', '133', '135', '137', '138', '170', '187', '189']
  var i = parseInt(10 * Math.random())
  var prefix = prefixArray[i]
  for (var j = 0; j < 8; j++) {
    prefix = prefix + Math.floor(Math.random() * 10)
  }
  return prefix
}

/* 是否手机号码*/
export function isPhone(rule, value, callback) {
  const reg = /^[1][3,4,5,7,8][0-9]{9}$/
  if (value === '' || value === undefined || value == null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的电话号码'))
    } else {
      callback()
    }
  }
}
